package com.loveto.service;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.loveto.common.JsonUtils;
import com.loveto.constant.LovetoConstant;

public class ReportUserActivity extends BaseActivity implements
View.OnClickListener {
	
	// 사용하는 변수들
	private ProgressDialog progressDialog;
	private Handler myHandler = new Handler();
	private String memberid;
	private String body;
	private String category;
	private String kind;
	private String target_userID;
	private String tournamentID;
	private String errorMsg;
	private boolean isSendSuccess;
	private String suspend_date;
	private String suspend_reason;
	private String phone_uid;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.loveto_report_user);
		
		//변수 초기화
		progressDialog = new ProgressDialog(this);
		isSendSuccess = false;
		errorMsg = "";
		
		//유저정보 받아오기
		SharedPreferences pref = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);
		memberid = pref.getString("memberid", "");
		phone_uid = pref.getString("phone_uid", "");
		
		//인텐트에서 정보 받아오기
		Intent intent = getIntent();
		category = intent.getStringExtra("category");
		target_userID = intent.getStringExtra("target_userID");
		tournamentID = intent.getStringExtra("tournamentID");
		
		//클릭 리스너 달기
		((RelativeLayout)findViewById(R.id.btn_goto_back)).setOnClickListener(this);
		((TextView)findViewById(R.id.btn_send_report)).setOnClickListener(this);
		
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
			case R.id.btn_send_report:
				if (isNetworkAvailableAndNotice()) {
					sendReport();
				}
				break;
			case R.id.btn_goto_back:
				finish();
				break;
		}
	}
	
	private void sendReport() {
		
		//신고종류 가져오기
		if (((RadioButton)findViewById(R.id.radio0)).isChecked()) {
			kind = "slang";
		} else if (((RadioButton)findViewById(R.id.radio1)).isChecked()) {
			kind = "spam";
		} else if (((RadioButton)findViewById(R.id.radio2)).isChecked()) {
			kind = "sexual";
		} else if (((RadioButton)findViewById(R.id.radio3)).isChecked()) {
			kind = "untrue";
		} else if (((RadioButton)findViewById(R.id.radio4)).isChecked()) {
			kind = "others";
		} else {
			showSimpleAlert("신고 사유를 선택해주세요.");
			return;
		}
		
		//텍스트 가져오기
		body = ((EditText)findViewById(R.id.input_body)).getText().toString();
		if (body.length() < 5) {
			showSimpleAlert("설명이 없거나 너무 짧습니다.");
			return;
		}
		
		progressDialog.setMessage("정보를 저장하고 있습니다.");
		progressDialog.show();
		Runnable runnable = new Runnable(){
			@Override
			public void run() {
				//UI 를 건들기 때문에 핸들러 사용.
				myHandler.post(new Runnable() {
					@Override
					public void run() {
							Log.d("tag", "sendReport start");
							
							try {
								//서버에 정보 보내기
								StringBuffer sb = new StringBuffer(LovetoConstant.REPORT_USER);
								sb.append("?category=").append(category);
								sb.append("&kind=").append(kind);
								sb.append("&target_userID=").append(target_userID);
								sb.append("&report_userID=").append(memberid);
								sb.append("&tournamentID=").append(tournamentID);
								sb.append("&explain_text=").append(URLEncoder.encode(body, "UTF-8"));
								sb.append("&phone_uid=").append(phone_uid);
								Log.d("tag", "url : " + sb.toString());
								String jsonText = JsonUtils.getStringFromUrl(sb.toString());
								Log.d("tag", "jsonText : " + jsonText);
								//JSONArray jsonArray = new JSONArray(jsonText);
								JSONObject object = new JSONObject(jsonText);
								String result = object.getString("result");
								String errer = object.getString("err");
								suspend_date = object.getString("suspend_date");
								suspend_reason = object.getString("suspend_reason");
								Log.d("tag", "result : " + result);
								Log.d("tag", "errer : " + errer);
								if (!"F".equals(result)) {
									isSendSuccess = true;
								} else {
									errorMsg = errer;
								}
							} catch (JSONException e) {
								e.printStackTrace();
								Log.d("tag", "setRoundInfo() error, " + e.getMessage());
							} catch (UnsupportedEncodingException e) {
								e.printStackTrace();
								Log.d("tag", "setRoundInfo() error, " + e.getMessage());
							} finally {
								if (isSendSuccess) {
									showSimpleAlert("신고가 성공적으로 전송되었습니다. 소중한 관심 가져주셔서 감사합니다!");
								} else if ("Incorrect PhoneID".equals(errorMsg)){
									//폰 인증정보가 틀린 경우
									showAlertIncorrectPhoneID(ReportUserActivity.this);
								} else if ("SuspendedID".equals(errorMsg)) {
									//이용 정지 상태인 경우
									showAlertSuspendID(ReportUserActivity.this, suspend_date, suspend_reason);
								} else if ("Today 3time reported".equals(errorMsg)) {
									showSimpleAlert("하루 신고 최대 횟수를 초과했습니다. 신고는 1일 3회까지 가능합니다.");
								} else if ("Overlap report".equals(errorMsg)) {
									showSimpleAlert("같은 항목에 대하여 중복으로 신고 할 수 없습니다.");
								} else {
									showSimpleAlert("신고 전송이 실패했습니다. 다시 시도해주세요.");
								}
							}
							progressDialog.dismiss();
							Log.d("tag", "sendReport end");
							
						} //Handler run End
				});
			}
		};
		new Thread(runnable).start();
	}

	@Override
    public void showSimpleAlert(String ment) {
    	new AlertDialog.Builder(this)
    	.setMessage(ment)
    	.setPositiveButton("확인", new DialogInterface.OnClickListener()
    	{
    		@Override
    		public void onClick(DialogInterface dialog, int which)
    		{
    			dialog.dismiss();
    			if (isSendSuccess) {
    				finish();
    			}
    		}
    	})
    	.show();
    }
	
}
